邮件协议SMTP|POP3|IMAP详解
更新日期:
邮件协议SMTP|POP3|IMAP详解
SMPT(简单邮件传输协议)
协议简介
目标是向用户提供高效、可靠的邮件传输。主要用户发送邮件。
工作机制
SMTP通常有两种工作模式。发送SMTP和接收SMTP。具体工作方式为:发送SMTP在接收到用户的邮件请求后,判断此邮件是否为本地邮件,若是直接投送到用户的邮箱,否则向DNS查询远端邮件服务器的MX记录,并建立与远端接收SMTP之间的一个双向传送通道,此后SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方向传送。一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果SMTP接收者可以接收邮件则返回OK应答。SMTP发送者再发出RCPT命令确认邮件是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此反复多次。当接收者收到全部邮件后会接收到特别的序列,入伏哦接收者成功处理了邮件,则返回OK应答。
服务器查找
SMTP服务器是基于域名服务DNS中计划收件人的域名来路由电子邮件。一般根据登陆邮箱的后缀域名通过DNS协议查找MX记录。
- 查找邮箱后缀域名的MX记录所指向的域名地址
- 根据指向域名地址通过dns查找域名地址指向的服务器ip
- tcp连接服务器ip:25(默认端口)(用来登陆或者发送)
操作示例
- 【c->s】telnet smtp.163.com 25【tcp连接】
- 【s->c】220 163.com Anti-spam GT for Coremail System (163com[20141201])【欢迎信息】
- 【c->s】helo 163.com【helo命令】
- 【s->c】250 OK
- 【c->s】auth login【请求登陆】
- 【s->c】334 dXNlcm5dhbWU6【要求用户名】
- 【c->s】Z3dfdsaffEDF=【输入base64用户名】
- 【s->c】334 UGFzc3ddvcmQ6【要求密码】
- 【c->s】fdasDSDFFFfDS=【输入base64密码】
- 【s->c】235 Authentication successful【登陆成功】
- 【c->s】mail from:xxx@163.com【发件地址】
- 【c->s】rcpt to:xxx@163.com【收件地址】
- 【c->s】DATA【data命令,要求发送内容】
- 【s->c】354 End data with .【提示信息,以.作为结束符号】
- 【c->s】from:gule11@163.com【要显示的发件地址】
- 【c->s】to:xxx@163.com【要显示的收件地址】
- 【c->s】hello world【内容】
- 【c->s】.【结束】
- 【s->c】250 Mail OK queued as smtp13,EcCowABHIv39riFXqUpKBA—.47592S3 1461825582【返回发送状态,我的测试不幸进入垃圾邮件】
- 【c->s】QUIT【退出命令】
- 【s->c】221 Bye
常用命令
SMTP命令不区分大小写,但参数区分大小写。常用命令如下:
- HELO ——向服务器标识用户身份发送者能欺骗、说谎,但一般情况下服务器都能检测到
- RCPT TO:
—— 用来标志邮件接收者的地址,常用在MAIL FROM后,可以有多个RCPT TO - DATA ——将之后的数据作为数据发送,以.标志数据的结尾
- REST ——重置会话,当前传输被取消
- NOOP ——要求服务器返回OK应答,一般用作测试
- QUIT ——结束会话
- VRFY ——验证指定的邮箱是否存在,由于安全方面的原因,服务器大多禁止此命令
- EXPN ——验证给定的邮箱列表是否存在,由于安全方面的原因,服务器大多禁止此命令
- HELP ——查询服务器支持什么命令
常用响应
- 501——参数格式错误
- 502——命令不可实现
- 503——错误的命令序列
- 504——命令参数不可实现
- 211——系统状态或系统帮助响应
- 214——帮助信息
- 220——服务器就绪
- 221——服务关闭
- 421——服务器未就绪,关闭传输信道
- 250——要求的邮件操作完成
- 251——用户非本地,将转发向
- 450——要求的邮件操作未完成,邮箱不可用
- 550——要求的邮件操作未完成,邮箱不可用
- 451——放弃要求的操作,处理过程中出错
- 551——用户非本地,请尝试
- 452——系统存储不足,要求的操作未执行
- 552——过量的存储分配,要求的操作未执行
- 553——邮箱名不可用,要求的操作未执行
- 354——开始邮件输入,以“.”结束
- 554——操作失败
POP3(邮局协议)
协议简介
POP3称为邮局协议版本3(Post Office Protocol-Version 3),是TCP/IP协议族中的一员,由RFC1939 定义,主要用于支持使用客户端远程管理在服务器上的电子邮件。POP3 使用 TCP 作为传输协议,端口号是110。
POP3协议相对简单,POP3服务器响应一般为:“+OK”表示成功,“-ERR”表示失败。
示例
- 【c->s】telnet pop.163.com 110【tcp连接】
- 【s->c】+OK Welcome to coremail Mail Pop3 Server (163coms[726cd8【欢迎信息】
- 【c->s】user xxx@163.com【登陆】
- 【s->c】+OK core mail
- 【c->s】pass password【密码】
- 【s->c】+OK 1025 message(s) [125726173 byte(s)]
- 【c->s】list【列出邮件】
- 【s->c】1023 15552【邮件id 邮件大小】
- 【s->c】1024 24905
- 【s->c】1025 5288
- 【s->c】.【列出邮件结束】
- 【c->s】tetr 1025【收取一封邮件内容】
- 【s->c】邮件内容
- 【c->s】quit【退出】
- 【s->c】+OK core mail
常用命令
- USER [username] 处理用户名
- PASS [password] 处理用户密码
- APOP [Name,Digest] 认可Digest是MD5消息摘要
- STAT 处理请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数
- UIDL [邮件id] 处理返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的
- LIST [邮件id] 处理返回邮件数量和每个邮件的大小
- RETR [邮件id] 处理返回由参数标识的邮件的全部文本
- DELE [邮件id] 处理服务器将由参数标识的邮件标记为删除,最后由【quit】命令执行
- RSET 处理服务器将重置所有标记为删除的邮件,用于撤消DELE命令
- TOP [邮件id n] 处理服务器将返回由参数标识的邮件前n行内容,n必须是正整数
- NOOP 处理服务器返回一个肯定的响应
- QUIT 终止会话
IMAP(交互式邮件存取协议)
pop3协议的不足
POP作为Internet上邮件的第一个离线协议标准,允许用户从服务器上把邮件下载到本地主机上,同时删除保存在邮件服务器上的邮件【现在的邮件服务商都可以设置是否同时删除】,从而使用户不必长时间地与邮件服务器连接,很大程度上减少了服务器和网络的整体开销。
但POP3有其天生的缺陷,即当用户接收电子邮件时,所有的信件都从服务器上清除并下载到客户机。在整个收信过程中,用户无法知道邮件的具体信息,只有照单全收入硬盘后,才能慢慢浏览和删除。这使用户几乎没有对邮件接收的控制决定权。一旦碰上邮箱被轰炸,或有比较大的邮件,用户不能通过分析邮件的内容及发信人地址来决定是否下载或删除,从而造成系统资源的浪费。而IMAP协议不但可以克服POP3的缺陷,而且还提供了更强大的功能。
IMAP简介
IMAP:是Internet Mail Access Protocol交互式邮件存取协议的简称。IMAP协议运行在TCP/IP协议之上,使用的端口是143。它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作。
与POP3协议类似,IMAP(Internet消息访问协议)也是提供面向用户的邮件收取服务。常用的版本是IMAP4。IMAP4改进了POP3的不足,用户可以通过浏览信件头来决定是否收取、删除和检索邮件的特定部分,还可以在服务器上创建或更改文件夹或邮箱,它除了支持POP3协议的脱机操作模式外,还支持联机操作和断连接操作。它为用户提供了有选择的从邮件服务器接收邮件的功能、基于服务器的信息处理功能和共享信箱功能。
IMAP4的脱机模式不同于POP3,它不会自动删除在邮件服务器上已取出的邮件,其联机模式和断连接模式也是将邮件服务器作为“远程文件服务器”进行访问,更加灵活方便。
其实说个简单的,就是如果你不对客户端做一个特殊设置的话,默认情况下,你使用POP3协议下载邮件,会把服务器上的所有邮件下载到客户端,而服务器上将不再存储。而IMAP在默认情况下,下载但是不删除邮件服务器上的文件。